package com.atguigu.math;

import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;

public class TestBigIntegerAndBigDecimal {
    @Test
    public void test1(){
        /*
        float和double是小数类型，是浮点型，不精确的，误差比较大。
            而且精度范围有限制。
            当精度要求更高时，就不能使用float和double，得用BigDecimal
         */
        BigDecimal a = new BigDecimal("968532.89414521452145217851458621456321");
        BigDecimal b = new BigDecimal("8266.8512365489632145632145214521");

//        System.out.println("和：" + (a+b));//错误，因为它们是对象，不能对象相加
        System.out.println("和：" + a.add(b));
        System.out.println("差：" + a.subtract(b));
        System.out.println("乘积：" + a.multiply(b));
       // System.out.println("商：" + a.divide(b));//除不尽
        //java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

        System.out.println("商：" + a.divide(b,1000, RoundingMode.HALF_UP));
        System.out.println("幂次方：" + a.pow(5));
    }

    @Test
    public void test2(){
        //整数：byte,short,int,long
        System.out.println("Long最大值：" + Long.MAX_VALUE);//9223372036854775807
        //如果有比long最大值更大的整数计算怎么办，必须使用BigInteger
        BigInteger a = new BigInteger("85214528963214563214568521452321456321456");
        BigInteger b = new BigInteger("89632155456541254125321563215232");
        System.out.println("和：" + a.add(b));
        System.out.println("差：" + a.subtract(b));
        System.out.println("乘积：" + a.multiply(b));
        System.out.println("商：" + a.divide(b));//仍然遵循，整数/整数只保留整数部分
        System.out.println("幂次方：" + a.pow(5));
    }
}
